package main.java.jvm;

public class TestClassLoader {
    public static void main(String[] args) {
        //查看是谁load到内存的,执行结果是null,为什么是null呢,BootStrap使用C++实现的,Java里并没有class和他对应
        System.out.println(String.class.getClassLoader());
        //这个是我们核心类库某个包里的类执行结果null,为什么他也是null呢,因为他也是被BootStrap类加载器加载的
        System.out.println(sun.awt.HKSCS.class.getClassLoader());
        //这个类是位于ext目录下某个jar文件里面,当你调用他执行结果也就是 sun.misc.Launcher$ExtClassLoader@5e2de80c
        System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader());
        //这个是我们自己写的ClassLoader加载器,它是由 sun.misc.Launcher$AppClassLoader@18b4aac2 加载的
        System.out.println(ClassLoader.class.getClassLoader());
        //他是一个Ext的ClassLoader调用他的getClass() 他本身也是一个Class,然后调用他的getClassLoader,他的ClassLoader又是谁,
        // 就是这个ClassLoader的ClassLoader是我们最顶级的ClassLoaderBootStrap,执行结果为null
        System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader().getClass().getClassLoader());
        System.out.println(ClassLoader.class.getClassLoader().getClass().getClassLoader());
    }
}
